
#pragma once
#ifndef isImage_BaseIsDefine
#define isImage_BaseIsDefine

#include "xege.h"
// #include <SDL2/SDL.h>

namespace xege {
class IMAGE_BASE {
protected:
	SDL_Surface*  sPic;   // 表面
	SDL_Texture*  tPic;   // 纹理
	SDL_Renderer* rPic;   // 渲染器
	// 窗口中，sPic -> tPic -> rPic -> 呈现
	// IMAGE 中，rPic -> sPic -> 窗口的 sPic

	// 宽高
	int w, h;
	// 偏移量，用于 draw 系列函数和 putImage 函数
	// 引入了坐标原点的设置
	POINT offset;
	
	//        前景色，背景色
	color_t FGColor, BGColor;  // Uint32
	COLOR   FG,      BG;       // struct
	COLORF  FGF,     BGF;      // struct
public:
	// 设置前景色
	void setFGColor (color_t C);
	// 设置背景色
	void setBGColor (color_t C);
	// 获取前景色
	color_t getFGColor   (void);
	// 获取背景色
	color_t getBGcolor   (void);
	// 获取前景色（struct）
	COLOR   getFGColorS  (void);
	// 获取背景色（struct）
	COLOR   getBGColorS  (void);
	// COLOR   getFGColorSF (void) {   return FGF;   }
	// COLOR   getBGColorSF (void) {   return BGF;   }
	
	// 设置原点坐标（POINT）
	void  setOffset (POINT p);
	// 设置原点坐标（POINT）
	void  setOrigin (POINT p);

	// 设置原点坐标（x，y）
	void  setOffset (int x, int y);
	// 设置原点坐标（x，y）
	void  setOrigin (int x, int y);

	// 得到当前原点坐标（POINT）
	POINT getOffset ( void  );
	
	// 获取 surface
	/* const  */SDL_Surface*  getSurface  (void);
	// 获取 renderer
	/* const  */SDL_Renderer* getRenderer (void);
	// 获取 texture
	/* const  */SDL_Texture*  getTexture  (void);

	// 获取 (P)IMAGE 宽
	uint getWidth  (void);
	// 获取 (P)IMAGE 高
	uint getHeight (void);


	// 获取全部像素点
	const color_t* getBuffer (void);
	// 获取像素点颜色
	const color_t getPixel (int x, int y);
	// const color_t getPR (uint x, uint y) { return *((color_t*)rPic -> pixels + y * w + x); }
	// 设置像素点颜色
	void setPixel (int x, int y, color_t C);

	IMAGE_BASE ();
	~IMAGE_BASE ();
private:
	// 用 color_t 设置 COLOR 颜色
	void setColor (COLOR &CC, color_t C);
	// void setColorF (COLOGF &CC, color_t C) {}
};  // 类 IMAGE_BASE 结尾
}  // 命名空间 xege 结尾
#endif